Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

Оптимизация таблиц под конкретный запрос (Johnny Woo)
Author Message
Johnny Woo
Guest





Карма: 388
   поощрить/наказать


PostPosted: Thu Mar 23, 2006 12:09 pm (написано за 6 минут 44 секунды)
   Post subject: Оптимизация таблиц под конкретный запрос
Reply with quote

Посоветуйте, пожалуйста, какие индексы/что-то еще могли бы помочь ускорить отработку такого запроса? В обеих таблицах по несколько тысяч записей, на компанию может быть примерно штук 30 комментариев, большинство компаний комментариев не имеют. Индексы пока что только primary на id для автоинкремента.
Code (SQL): скопировать код в буфер обмена
SELECT DISTINCT c.*, z.c_manager_id, max(z.c_date) AS last_date
        FROM cc_companies c
                LEFT JOIN cc_comments z ON z.c_company_id = c.c_id
                WHERE 1
        GROUP BY c.c_id
        ORDER BY c.c_priority DESC, c.c_id ASC
        LIMIT 0, 20
Where пустое потому, что запрос генерируется автоматически (там могут быть, например, выборки только компаний с комментариями, и т.д.).
MySQL 4.0.26.
Back to top
Миша Спларов
Участник форума



Joined: 17 Nov 2003
Posts: 821
Карма: 65
   поощрить/наказать

Location: Россия, Москва

PostPosted: Thu Mar 23, 2006 1:27 pm (спустя 1 час 17 минут; написано за 43 секунды)
   Post subject:
Reply with quote

Где структура таблиц? И примеры WHERE тоже нужно привести, т.к. в первую очередь именно для WHERE нужны индексы.
Back to top
View user's profile Send private message
Johnny Woo
Guest





Карма: 388
   поощрить/наказать


PostPosted: Thu Mar 23, 2006 2:19 pm (спустя 52 минуты; написано за 1 минуту 59 секунд)
   Post subject:
Reply with quote

Структура:
Code (SQL): скопировать код в буфер обмена
CREATE TABLE `cc_companies` (
  `c_id` int(11) NOT NULL AUTO_INCREMENT,
  `c_priority` tinyint(1) NOT NULL DEFAULT '0',
  --
  PRIMARY KEY  (`c_id`)
) TYPE=MyISAM;

CREATE TABLE `cc_comments` (
  `c_id` int(11) NOT NULL AUTO_INCREMENT,
  `c_manager_id` int(11) NOT NULL DEFAULT '0',
  `c_company_id` int(11) NOT NULL DEFAULT '0',
  `c_person_id` int(11) NOT NULL DEFAULT '0',
  `c_date` int(11) NOT NULL DEFAULT '0',
  `c_text` text NOT NULL,
  PRIMARY KEY  (`c_id`)
) TYPE=MyISAM;
where, например, такой:
Code (SQL): скопировать код в буфер обмена
WHERE z.c_manager_id = '123' OR z.c_id IS NULL
То есть либо компании без комментариев, либо с комментариями, среди которых есть написанные нужным человеком.
Back to top
Миша Спларов
Участник форума



Joined: 17 Nov 2003
Posts: 821
Карма: 65
   поощрить/наказать

Location: Россия, Москва

PostPosted: Thu Mar 23, 2006 11:11 pm (спустя 8 часов 51 минуту; написано за 17 секунд)
   Post subject:
Reply with quote

ещё добавить индекс на c_manager_id.
Back to top
View user's profile Send private message
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Tue Apr 25, 2006 3:06 pm (спустя 1 месяц 1 день 15 часов 54 минуты; написано за 31 секунду)
   Post subject:
Reply with quote

Используйте инструкцию MySQL EXPLAIN и читайте документацию на предмет того, как понимать ее результаты. А затем уже делайте индексы.
Back to top
View user's profile Send private message Send e-mail
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Page 1 of 1    Email to a Friend.
You cannot post new topics in this forum. You cannot reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML